package com.slz3.business.module.orderManagement.ordOrder.domain;

import com.slz3.business.module.orderManagement.ordOrderLine.domain.OrdOrderLine;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.math.BigDecimal;
import java.util.List;
import java.util.UUID;

import static javax.persistence.EnumType.STRING;


/**
 * 第一，老架构，订单只有一张表，一个订单对应一个商品，所以做到购物车下单的时候，加了一个支付表，so，老架构中，支付表就是我们常说的订单，而老架构中的订单，是我们常说的订单详情。
 *
 * 第二，新架构，我们按照电商常规的逻辑，设置了订单，和订单行两张表，就是常规的订单和订单详情。在新架构中，咱们就按照常规的逻辑走，订单号在订单上，订单行也分配一个编号（这个不重要），订单一对多订单行，订单行一对一商品。
 *
 * 第三，OrdOrder就是订单，OrdOrderLine就是订单详情；
 *
 * 第四，现在，物流单号就放在订单OrdOrder里面，OrdOrderLine里面也放一个物流单号，相当于冗余存放 —— 购物车后面会根据商品发货地址做限制拆分 —— 不同的发货地商品，不能作为一个订单；；也有可能，像亚马逊一样，一个订单可以有不同的发货地，根据不同发货地，对订单下的订单行分组，这个现在还不确定，所以订单和订单行里先都存上物流单号；
 *
 * 第五，物流信息也要存在redis中，除非复杂查询redis不支持，api系统只跟redis交互；另外，物流号应该是后台点击发货的时候维护到订单中的，当触发发货功能时，做一个数据同步操作即可，具体数据同步策略，另外再讨论；
 */
@Entity
@Table(schema = "order_management", name = "ord_order")
@Data
@EqualsAndHashCode(callSuper = true)
public class OrdOrder extends OrdOrderEntity {

    /**
     * 自增 Long
     */
    private Long incrementId;

    /**
     *   订单号
     *  `pay_no` varchar(100) DEFAULT NULL COMMENT '订单号',
     */
   private String serPayNo;
    /**
     * `总金额
     * total_fee` double DEFAULT NULL COMMENT '总金额',
     * 
     */
    private BigDecimal serTotalFee;
    //公共属性里面有的`create_time` varchar(200) DEFAULT NULL COMMENT '创建时间',
    /**
     * 支付类型
     * 1现金
     * 2积分
     * `pay_type` int(11) DEFAULT NULL COMMENT '支付类型1现金 2积分',
     */
    @Enumerated(STRING)
    private  PayTypeEnum  serPayType;

    /**
     * 用户ID
     * `tzw_user_id` bigint(20) DEFAULT NULL COMMENT '用户ID',
     */
    private UUID serUserId;

    /**
     * 地址ID
     * `tzw_order_address_id` bigint(11) DEFAULT NULL COMMENT '地址ID',
     */
    private UUID serOrderAddressId;

    /**
     * 订单关闭原因
     */
    private String serCloseReason;

 /**
  * 订单行列表
     */
    @Transient
    List<OrdOrderLine> ordOrderLineList;

    /**
     * 用户名
     */
    private String userName;

    /**
     * 收获地址省市县
     */
    private String addressStr;

    /**
     * 收获地址详细
     */
    private String addressDetail;

    /**
     * 收货人姓名
     */
    private String receiverName;

    /**
     * 收货人电话
     */
    private String receiverPhone;

}
